package ar.edu.utn.frgp.banco.servlets;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ar.edu.utn.frgp.banco.domain.Cliente;
import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.Movimientos;
import ar.edu.utn.frgp.banco.domain.Transferencia;
import ar.edu.utn.frgp.banco.service.RecursoServiceCuenta;
import ar.edu.utn.frgp.banco.service.RecursoServiceMovimientos;
import ar.edu.utn.frgp.banco.service.RecursoServiceTransferencias;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceCuentaImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceMovimientosImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceTransferenciasImpl;
import ar.edu.utn.frgp.banco.servlets.scope.CuentaBean;
import ar.edu.utn.frgp.banco.servlets.scope.MessageBean;

public class Transferencias2RealizarTransferenciaServlet extends GenericServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
    public Transferencias2RealizarTransferenciaServlet() {
        // TODO Auto-generated constructor stub
    }

	@Override
	public void realizarAccion(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		
		String cuentadeorigen = (String)req.getParameter("cmbCuentaOrigen");
		String cuentadedestino = (String)req.getParameter("cmbCuentaDestino");
		String montoTransaccion = (String)req.getParameter("monto");
		
		
		int  cuentaClienteOrigen=Integer.parseInt(cuentadeorigen);
		int  cuentaClienteDestino=Integer.parseInt(cuentadedestino);
		double monto = Double.parseDouble(montoTransaccion);
		double saldoNuevo;
		double pronosticoSaldo;

		Cliente elCliente = (Cliente)req.getSession().getAttribute("cliente");
		
		//
		Cuenta cuorigenAux = new Cuenta();
		Cuenta cuorigen = new Cuenta();
		Cuenta cudestino = new Cuenta();
		Transferencia regTransferencia = new Transferencia();
		Movimientos regMovimientoorigen = new Movimientos();
 		Movimientos regMovimientodestino = new Movimientos();
		
		RecursoServiceCuenta serviceCuenta = new RecursoServiceCuentaImpl();
		RecursoServiceMovimientos serviceMovimientos = new RecursoServiceMovimientosImpl();
		RecursoServiceTransferencias serviceTransferencias = new RecursoServiceTransferenciasImpl();
		///
				
		///corroborar el saldo de la cuenta
		cuorigenAux = serviceCuenta.buscarCuenta(cuentaClienteOrigen); 
		cuorigenAux.setSaldo(cuorigenAux.getSaldo()- monto);
		saldoNuevo= cuorigenAux.getSaldo();
		pronosticoSaldo=cuorigenAux.getDescubierto()*-1;
		///
		String jsp = "";
		
		if (saldoNuevo <= pronosticoSaldo) {
			MessageBean bean = new MessageBean();
			bean.setMensaje("El saldo de su cuenta no le permite realizar la transaccion, Supero El Monto Descubierto");
			req.setAttribute("msjBean", bean);

			jsp = "Transferencias2SeleccionarCuentas.jsp";
			
			req.getSession().setAttribute("cliente", elCliente);
			
			List<Cuenta> cuentasorigen = new ArrayList<Cuenta>();		
			List<Cuenta> cuentasdestino = new ArrayList<Cuenta>();
			cuentasorigen = serviceCuenta.listarCuentasActivas(elCliente.getDni());
			cuentasdestino = serviceCuenta.listarTodasLasCuentasActivas();
			
			CuentaBean beancuentaorigen = new CuentaBean();
	        beancuentaorigen.setCuentas(cuentasorigen);
	        req.setAttribute("beancuentaorigen", beancuentaorigen);
	        
	        CuentaBean beancuentadestino = new CuentaBean();
	        beancuentadestino.setCuentas(cuentasdestino);
	        req.setAttribute("beancuentadestino", beancuentadestino);
		}
		else {
			
			jsp = "menutransferencias.jsp";
			
					
			cuorigen = serviceCuenta.buscarCuenta(cuentaClienteOrigen); 
			cudestino = serviceCuenta.buscarCuenta(cuentaClienteDestino);

			cuorigen.setSaldo(cuorigen.getSaldo()- monto);
			cudestino.setSaldo(cudestino.getSaldo()+ monto);
			
			serviceCuenta.modificarSaldoCuenta(cuorigen);
			serviceCuenta.modificarSaldoCuenta(cudestino);
			
			regTransferencia.cargarTransferencia(cuentaClienteOrigen, cuentaClienteDestino, monto);
			serviceTransferencias.registrarTransferencia(regTransferencia);
			
			regMovimientoorigen.cargarMovimiento(cuentaClienteOrigen, 1, 2, cuorigen.getSaldo(),monto );
			serviceMovimientos.registrarMovimiento(regMovimientoorigen);
			
			regMovimientodestino.cargarMovimiento(cuentaClienteDestino, 2, 2, cudestino.getSaldo(),monto );
			serviceMovimientos.registrarMovimiento(regMovimientodestino);
	
			
		}
	
			req.getRequestDispatcher(jsp).forward(req, resp);

	
          
		
		         
	
	}
}

